package com.ovidiojf.fieldplan.atleta;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

public class AtletaDAOHibernate implements AtletaDAO {
	
	private Session session;

	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	@Override
	public void salvar(Atleta atleta) {
		session.save(atleta);
		session.save(atleta.getEndereco());
		
//		List<Equipe> equipes = atleta.getEquipes();
//		
//		for (Equipe equipe : equipes) {
//			session.save(equipe);			
//		}
		
	}

	@Override
	public void excluir(Atleta atleta) {
		session.delete(atleta);
	}

	@Override
	public void alterar(Atleta atleta) {
		session.update(atleta);
//		session.update(atleta.getEndereco());
//		session.update(atleta.getContato());
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Atleta> listar() {

		return session.createCriteria(Atleta.class).list();
	}

	@Override
	public Atleta pesquisarNome(String nome) {
		Query consulta = session.createQuery("from Atleta a where a.nome like :nome");
		consulta.setString("nome", "%"+nome+"%");
		return (Atleta) consulta.uniqueResult();
	}

	@Override
	public Atleta pesquisarId(String id) {
		return pesquisarId(new Integer(id));
	}

	@Override
	public Atleta pesquisarId(Integer id) {
//		Query query = session.createQuery("from Atleta a where a.id = :id");
//		query.setInteger("id", id);
//		return (Atleta)query.uniqueResult();
		
		Criteria criteria = this.session.createCriteria(Atleta.class);
		criteria.add(Restrictions.idEq(id));
		
		return (Atleta) criteria.uniqueResult();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Atleta> listarPorNome(String nome) {
//		Query consulta = this.session.createQuery("from Atleta a where a.nome like :nome");
//		consulta.setString("nome", "%"+nome+"%");
//		return consulta.list();

		Criteria criteria = this.session.createCriteria(Atleta.class);
		criteria.add(Restrictions.like("nome", "%"+nome+"%"));
		return criteria.list();
	
	}

}
